import configparser
# 配置文件
# 常用的配置文件后缀是.ini、.conf、.py，配置文件的名字一般是config便于理解和使用
# .ini 文件是Initialization File的缩写，即初始化文件，是windows的系统配置文件所采用的存储格式，统管windows的各项配置

# 创建ConfigParser实例
config = configparser.ConfigParser()

# 读取文件
config.read('config.ini', encoding='utf-8')
# 获取所有sections
print(config.sections())
# 获取指定 section 的 keys 和 values，如果有 DEFAULT 的话会自动加上
print(config.items('mysql'))
# 获取指定 section 的 keys
print(config.options('mysql'))
# 获取指定 key 的 value
print(config['mysql']['password'])
# 获取DEFAULT
# print(config.defaults())
config.clear()

# 写入配置文件
config['Test'] = {'id': 1001, 'name': 'Daniel', 'pass': 'True'}
with open('config.ini', 'a+') as congfigfile:
    config.write(congfigfile)
config.clear()
# 通过字典写入
config.read_dict({'Test1': {'key': 1002, 'number': 996},
                 'Test2': {'key': 1008, 'id': 996}})
with open('config.ini', 'a+') as congfigfile:
    config.write(congfigfile)
config.clear()

# 添加
config.add_section('section')
config.set('section', 'key1', 'value1')
config.write(open('config.ini', 'a+'))

# 删除
config.remove_option('section', 'key1')
config.remove_section('Test1')
# [DEFAULT] 一般包含 ini 格式配置文件的默认项，所以 configparser 部分方法会自动跳过这个 section 。 
# sections() 是获取不到的，还有删除方法对[DEFAULT] 也无效，但指定删除和修改[DEFAULT] 里的 keys & values 
# 是可以的，还有个特殊的是，has_section() 也无效，可以和 in 区别使用。
